package com.whoiszxl.starter.captcha.graphic.core;

import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ReflectUtil;
import com.wf.captcha.base.Captcha;
import com.whoiszxl.starter.captcha.graphic.config.GraphicCaptchaProperties;

import java.awt.*;

public class GraphicCaptchaService {

    private final GraphicCaptchaProperties properties;

    public GraphicCaptchaService(GraphicCaptchaProperties properties) {
        this.properties = properties;
    }


    /**
     * 生成一个Captcha对象。
     * 这个方法通过反射机制根据配置的属性创建特定实现类的Captcha实例，
     * 然后配置它的长度、字体和大小。
     *
     * @return Captcha 生成的验证码对象
     */
    public Captcha getCaptcha() {
        // 使用反射创建Captcha实现类的实例，基于配置的宽度、高度
        Captcha captcha = ReflectUtil.newInstance(properties.getType().getCaptchaImpl(),
                properties.getWidth(),
                properties.getHeight());
        // 设置验证码长度
        captcha.setLen(properties.getLength());

        // 如果字体名称配置不为空，则设置验证码的字体
        if (CharSequenceUtil.isNotBlank(properties.getFontName())) {
            captcha.setFont(new Font(properties.getFontName(), Font.PLAIN, properties.getFontSize()));
        }
        return captcha;
    }

}
